A storage system is a computer that provides storage service relating to the organization of information on writable persistent storage devices, such as memories, tapes or disks. The storage system may be deployed within a storage area network (SAN) or a network attached storage (NAS) environment. When used within a NAS environment, the storage system may be embodied as a file server including an operating system that implements a file system to logically organize the information as a hierarchical structure of directories and files on, e.g., the disks. Each “on-disk” file may be implemented as a set of data structures, e.g., disk blocks, configured to store information, such as the actual data for the file. A directory, on the other hand, may be implemented as a specially formatted file in which information about other files and directories are stored.
The file server, or filer, may be further configured to operate according to a client/server model of information delivery to thereby allow many client systems (clients) to access shared resources, such as files, stored on the filer. Sharing of files is a hallmark of a NAS system, which is enabled because of semantic level of access to files and file systems. Storage of information on a NAS system is typically deployed over a computer network comprising a geographically distributed collection of interconnected communication links, such as Ethernet, that allow clients to remotely access the information (files) on the filer. The clients typically communicate with the filer by exchanging discrete frames or packets of data according to pre-defined protocols, such as the Transmission Control Protocol/Internet Protocol (TCP/IP).
In the client/server model, the client may comprise an application executing on a computer that “connects” to the filer over a computer network, such as a point-to-point link, shared local area network, wide area network or virtual private network implemented over a public network, such as the Internet. NAS systems generally utilize file-based access protocols; therefore, each client may request the services of the filer by issuing file system protocol messages (in the form of packets) to the file system over the network. By supporting a plurality of file system protocols, such as the conventional Common Internet File System (CIFS), the Network File System (NFS) and the Direct Access File System (DAFS) protocols, the utility of the filer may be enhanced for networking clients.
A SAN is a high-speed network that enables establishment of direct connections between a storage system and its storage devices. The SAN may thus be viewed as an extension to a storage bus and, as such, an operating system of the storage system enables access to stored information using block-based access protocols over the “extended bus”. In this context, the extended bus is typically embodied as Fibre Channel (FC) or Ethernet media (i.e., network) adapted to operate with block access protocols, such as Small Computer Systems Interface (SCSI) protocol encapsulation over FC or TCP/IP/Ethernet. A SAN arrangement or deployment further allows decoupling of storage from the storage system, such as an application server, and placing of that storage on a network. However, the SAN storage system typically manages storage resources pre-assigned by a user, e.g., a system administrator. A client accesses the information stored on these storage resources in terms of block addressing using, e.g., a logical unit number (lun).
Storage virtualization generally involves the pooling of storage resources from multiple storage devices, such as physical disks, typically across a network by one or more storage systems to create a “logical unit”. The term “logical unit” as conventionally used in a SAN environment implies a storage entity that is constructed (by a system administrator) by specifying physical disks and extents within those disks via “carving” operations (such as slicing and/or partitioning) that combine those extents/disks into a user-defined volume storage entity. An extent is a set of contiguously addressed blocks (or “slices”) of storage within the specified physical disks. Such construction can occur on either the storage device or application server. As used in this context, the term lun refers to an addressable storage entity backed by data containers such as logical units.
As used in the SAN industry, a storage virtualization scheme is a way of mapping ranges of block numbers for a lun (from the client's view) onto sets of ranges of block numbers on “backend” storage devices. A conventional SAN system may implement a simplified notion of storage virtualization that presents a view of storage (i.e., a user-defined volume) to a client, wherein the logical unit is formed from extents of various disks accessible to the client that are selected by a user or system administrator. This simplified virtualization scheme involves the layering of luns over the user-defined logical unit. The SAN system may further implement a static block numbering policy (such as, e.g., a write in-place storage system) wherein the locations of lun data structures, such as data blocks, on disk are fixed. Changes to the data blocks are made “in place” in accordance with the write in-place storage system. Accordingly, the SAN system provides logical unit management capabilities, but in a fixed and non-flexible manner with respect to the block numbering policy of the simplified storage virtualization scheme.
There are a number of additional shortcomings associated with the conventional SAN storage system, including the inability to efficiently scale the system architecture. In this context, scalability involves connectivity with respect to clients of the storage system, as well as sizing and performance of backend storage coupled to the system. In particular, there is a limit to the number of clients that can connect to the storage system because of a constraint on the number of network adapters that can be accommodated by the system platform. In addition, there is a limit to the number of storage adapters that the storage system can accommodate, thus restricting sizing/scalability of storage coupled to the system. Moreover, the SAN system typically stores incoming data access requests while rendering decisions as to the locations of data targeted by the incoming requests. Such “store and forward” operations are bounded by various architectural limitations, such as buffer memory bandwidth, that affect the performance of the storage system.